package clases.academico;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Curso extends Paralelo {

    private int idcurso = 0;
    private String curso;
    private String tipo;
    private String categoria;
    private DataSource dt;
    private String sql;

    public Curso() {
        dt = new DataSource();

    }

    public int getIdcurso() {
        return idcurso;
    }

    public String getCurso() {
        return curso;
    }

    public void setCurso(String curso) {
        this.curso = curso;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

   
    private int getMax() {
        return Sql.getMax("IDCURSO", "CURSO", true);

    }
    
    public boolean ExistCurso(String curso) {
        sql = "SELECT * FROM CURSO WHERE CURSO='" + curso + "'";
       
        return Sql.isExiste(sql);
    }
    
    public void listarCurso(JComboBox cbo) {
        cbo.removeAllItems();
        cbo.addItem("--Seleccione--");
        sql = "SELECT DISTINCT CURSO FROM CURSO";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            cbo.addItem(dt.getString(1));
        }
        cbo.setSelectedIndex(0);
    }
    
    
    public boolean ExistenciaCurso(String curso) {
        sql = "SELECT * FROM CURSO JOIN PARALELO "
                + "ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE CONCAT(CURSO,' ',PARALELO)!='" + this.curso +' '+this.getParalelo()+ "' "
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "'";
       
        return Sql.isExiste(sql);
    }

    public boolean guardarCurso() {
        if (Sql.insertar("INSERT INTO CURSO VALUES (" + this.getMax() + ", " + this.getIdparalelo() + ", "
                + "'" + this.curso + "', '" + this.tipo + "', '" + this.categoria + "')") == true) {
            Dialogos.GuardadoconExito();
            this.limpiarCurso();
            return true;
        } else {
            Dialogos.Error("Error al ingresar el curso...!");
            return false;
        }

    }

    public boolean actualizarCurso() {
        if (Sql.actualizar("UPDATE CURSO SET IDPARALELO=" + this.getIdparalelo() + ", CURSO='" + this.curso + "',"
                + " TIPO='" + this.tipo + "', CATEGORIA='" + this.categoria + "' WHERE IDCURSO=" + this.idcurso + "")) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizados correctamente...!", 1);
            this.limpiarCurso();
            return true;
        } else {
            global.Mensajes.mostrarMensaje("Error", "Error al actualizar los datos...!", 3);
            return false;
        }
    }

    public boolean EliminarCurso(String curso) {
        if (Sql.isExiste("SELECT CONCAT(CURSO,' ',PARALELO) AS CURSO FROM CURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE IDCURSO IN (SELECT IDCURSO FROM PERIODOCURSO) "
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "'") == true) {
            Dialogos.Error("El curso esta asignado a un periodo... No se puede eliminar");
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar el curso?") == true) {
            Sql.eliminar("DELETE FROM CURSO WHERE IDPARALELO IN "
                    + "(SELECT IDPARALELO FROM PARALELO "
                    + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "')");
            return true;
        }

        return false;
    }

    public String SqlGeneral() {
        sql = "SELECT CONCAT(CURSO,' ',PARALELO), TIPO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "ORDER BY (IDCURSO) DESC";
        return sql;
    }

    public String SqlCurso(String curso) {
        sql = "SELECT CONCAT(CURSO,' ',PARALELO), TIPO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE CURSO LIKE ('" + curso + "%') ORDER BY (IDCURSO) DESC";
        return sql;
    }

    public String SqlCategoria(String categoria) {
        sql = "SELECT CONCAT(CURSO,' ',PARALELO), TIPO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE CATEGORIA ='" + categoria + "' ORDER BY (IDCURSO) DESC";
        return sql;
    }

    public String SqlTipo(String tipo) {
        sql = "SELECT CONCAT(CURSO,' ',PARALELO), TIPO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE TIPO LIKE ('" + tipo + "%') ORDER BY (IDCURSO) DESC";
        return sql;
    }

    public void ConsultaCurso(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        modelo.addColumn("CURSO");
        modelo.addColumn("TIPO");
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(300);
        tabla.setModel(modelo);

        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[3];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);

            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void llenardatosCurso(String curso) {
        sql = "SELECT IDCURSO, PARALELO, CURSO, TIPO, CATEGORIA FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idcurso = dt.getInt(1);
            this.setParalelo(dt.getString(2));
            this.curso = dt.getString(3);
            this.tipo = dt.getString(4);
            this.categoria = dt.getString(5);

        }
    }

    private void limpiarCurso() {
        this.curso = "";
        this.tipo = "";
        this.setParalelo("");
        this.categoria="";
    }

    public void sacarIdCurso(String curso) {
        sql = "SELECT IDCURSO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE CONCAT(CURSO, ' ', PARALELO)='" + curso + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idcurso = dt.getInt(1);
        }
    }
}
